home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 10 / FM Towns Free Software Collection 10.iso / fb386 / lib / blb / selector.blb < prev    next >
Text File  |  1995-02-17  |  9KB  |  135 lines

  1. 61800 '-------------------------- 項目選択ルーチン version 1.12 --------------------------------------
  2. 61801 '入力  LENGTH  = 文字列の長さ
  3. 61802 '      SEL     = 項目数
  4. 61803 '      SEL$(n) = 表示する文字列
  5. 61804 '      TITLE$  = タイトル
  6. 61805 '出力  SEL     = 項目番号(=0,1,2,・・・) 負数のとき未選択
  7. 61806 '変数  A%,B%,C%,D%,I%,J%,BLB_H%,BLB_MX%,BLB_MY%,BLB_M%,BLB_DX%,BLB_DY%,BLB_W%,BLB_T%
  8. 61807 *BLB_SELECTOR
  9. 61808  BLB_W%=LENGTH*6+40:BLB_DX%=320-BLB_W%\2:BLB_DY%=155:MOUSEPAT=0:GOSUB *BLB_MOUSEPAT
  10. 61809  MOUSE 1,,,0:GET@A(BLB_DX%,BLB_DY%)-(BLB_DX%+BLB_W%,BLB_DY%+170),BLB_MEM%
  11. 61810  LINE(BLB_DX%,BLB_DY%)-STEP(BLB_W%,170),PSET,%8,BF,7
  12. 61811  LINE(BLB_DX%,BLB_DY%)-STEP(BLB_W%,16),PSET,%8,BF,%9
  13. 61812  LINE(BLB_DX%,BLB_DY%)-STEP(32+LEN(TITLE$)*6,16),PSET,%8,BF
  14. 61813  SYMBOL(BLB_DX%+22,BLB_DY%+3),TITLE$,.75!,.75!,7
  15. 61814  LINE(BLB_DX%+2,BLB_DY%+2)-STEP(12,12),PSET,7,BF,%6
  16. 61815  LINE(BLB_DX%+2,BLB_DY%+2)-STEP(12,12),PSET,7:LINE(BLB_DX%+2,BLB_DY%+14)-STEP(12,-12),PSET,7
  17. 61816  LINE(BLB_DX%+BLB_W%-2,BLB_DY%)-STEP(1,170),PSET,%8,B
  18. 61817  LINE(BLB_DX%,BLB_DY%+169)-STEP(BLB_W%,0),PSET,%8
  19. 61818  LINE(BLB_DX%+3,BLB_DY%+20)-STEP(LENGTH*6+13,127),PSET,%8,B:A%=BLB_DX%+BLB_W%-21
  20. 61819  LINE(A%,BLB_DY%+36)-STEP(16,95),PSET,%8,B
  21. 61820  LINE(A%,BLB_DY%+20)-STEP(16,14),PSET,%8,B:SYMBOL(A%+3,BLB_DY%+21),"▲",.75!,.75!,%8
  22. 61821  LINE(A%,BLB_DY%+133)-STEP(16,14),PSET,%8,B:SYMBOL(A%+3,BLB_DY%+134),"▼",.75!,.75!,%8
  23. 61822  FOR I%=1 TO 2:CONNECT(BLB_DX%+BLB_W%-40*I%-1,BLB_DY%+150)-STEP(34,0)-STEP(1,1)-STEP(0,14)-STEP(-1,1)-STEP(-34,0)-STEP(-1,-1)-STEP(0,-14),%8
  24. 61823  SYMBOL(BLB_DX%+BLB_W%-40*I%+5,BLB_DY%+152),MID$("取消選択",I%*4-3,4),.75!,.75!,%8:NEXT
  25. 61824  BLB_H%=0:BLB_M%=-1:GOSUB *BLB_SEL_PUTSTR:MOUSE 1,,,1:WHILE INKEY$<>"":WEND
  26. 61825 *BLB_SEL_MAIN
  27. 61826  WAIT 1:IF BLB_T%<150 THEN BLB_T%=BLB_T%+1
  28. 61827  A%=ASC(INKEY$+" "):IF A%=24 THEN SEL=-1:GOTO *BLB_SEL_END
  29. 61828  IF A%=13 AND BLB_M%>=0 THEN SEL=BLB_M%:GOTO *BLB_SEL_END
  30. 61829  IF MOUSE(2,0)=0 THEN *BLB_SEL_MAIN ELSE BLB_MX%=MOUSE(0)-BLB_DX%:BLB_MY%=MOUSE(1)-BLB_DY%
  31. 61830  IF BLB_MX%<0 OR BLB_MY%<0 OR BLB_MX%>BLB_W% OR BLB_MY%>170 THEN *BLB_SEL_MAIN
  32. 61831  IF BLB_MX%>1 AND BLB_MX%<15 AND BLB_MY%>1 AND BLB_MY%<15 THEN *BLB_SEL_EXIT
  33. 61832  IF BLB_MX%>4 AND BLB_MX%<BLB_W%-24 AND BLB_MY%>20 AND BLB_MY%<146 THEN *BLB_SEL_MARK
  34. 61833  IF BLB_MX%>BLB_W%-22 AND BLB_MX%<BLB_W%- 4 AND BLB_MY%> 20 AND BLB_MY%< 34 THEN *BLB_SEL_UPDOWN
  35. 61834  IF BLB_MX%>BLB_W%-22 AND BLB_MX%<BLB_W%- 4 AND BLB_MY%>133 AND BLB_MY%<147 THEN *BLB_SEL_UPDOWN
  36. 61835  IF BLB_MX%>BLB_W%-42 AND BLB_MX%<BLB_W%- 6 AND BLB_MY%>149 AND BLB_MY%<165 THEN *BLB_SEL_YESNO
  37. 61836  IF BLB_MX%>BLB_W%-82 AND BLB_MX%<BLB_W%-46 AND BLB_MY%>149 AND BLB_MY%<165 THEN *BLB_SEL_YESNO
  38. 61837  IF BLB_MX%>BLB_W%-22 AND BLB_MX%<BLB_W%- 4 AND BLB_MY%> 35 AND BLB_MY%<132 AND SEL>8 THEN *BLB_SEL_BAR
  39. 61838  IF BLB_MY%<16 THEN *BLB_SEL_MOVE
  40. 61839  GOTO *BLB_SEL_MAIN
  41. 61840 *BLB_SEL_YESNO
  42. 61841  J%=1+(MOUSE(4,0)-BLB_DX%>BLB_W%-42):B%=0
  43. 61842  WHILE MOUSE(2,0):BLB_MX%=MOUSE(0)-BLB_DX%+J%*40:BLB_MY%=MOUSE(1)-BLB_DY%
  44. 61843   A%=(BLB_MX%>BLB_W%-42)*(BLB_MX%<BLB_W%-6)*(BLB_MY%>149)*(BLB_MY%<165)
  45. 61844   IF A%<>B% THEN LINE(BLB_DX%+BLB_W%-40*J%-41,BLB_DY%+151)-STEP(34,14),XOR,%7,BF:B%=A%
  46. 61845  WEND:IF B%=0 THEN *BLB_SEL_MAIN
  47. 61846  LINE(BLB_DX%+BLB_W%-40*J%-41,BLB_DY%+151)-STEP(34,14),XOR,%7,BF
  48. 61847  IF J%=0 THEN SEL=-1 ELSE IF BLB_M%<>-1 THEN SEL=BLB_M% ELSE *BLB_SEL_MAIN
  49. 61848  GOTO *BLB_SEL_END
  50. 61849 *BLB_SEL_EXIT
  51. 61850  B%=0:WHILE MOUSE(2,0):BLB_MX%=MOUSE(0)-BLB_DX%:BLB_MY%=MOUSE(1)-BLB_DY%
  52. 61851   A%=(BLB_MX%>1)*(BLB_MY%>1)*(BLB_MX%<15)*(BLB_MY%<15)
  53. 61852   IF A%<>B% THEN LINE(BLB_DX%+2,BLB_DY%+2)-STEP(12,12),XOR,%7,BF:B%=A%
  54. 61853  WEND:IF B%=0 THEN *BLB_SEL_MAIN ELSE SEL=-1:GOTO *BLB_SEL_END
  55. 61854 *BLB_SEL_MOVE
  56. 61855  MOUSEPAT=3:GOSUB *BLB_MOUSEPAT:C%=BLB_MX%:D%=BLB_MY%:MOUSE 4,C%,D%,BLB_RESO_X-1-BLB_W%+C%,BLB_RESO_Y-171+D%
  57. 61856  LINE(BLB_DX%,BLB_DY%)-STEP(BLB_W%,170),XOR,%7,B
  58. 61857  A%=BLB_DX%:B%=BLB_DY%:FOR I%=0 TO 1:I%=1+MOUSE(2,0):BLB_MX%=MOUSE(0)-C%:BLB_MY%=MOUSE(1)-D%
  59. 61858  IF A%<>BLB_MX% OR B%<>BLB_MY% THEN LINE(A%,B%)-STEP(BLB_W%,170),XOR,%7,B:LINE(BLB_MX%,BLB_MY%)-STEP(BLB_W%,170),XOR,%7,B
  60. 61859  A%=BLB_MX%:B%=BLB_MY%:NEXT:MOUSE 4,0,0,BLB_RESO_X-1,BLB_RESO_Y-1:LINE(BLB_MX%,BLB_MY%)-STEP(BLB_W%,170),XOR,%7,B
  61. 61860  MOUSEPAT=0:GOSUB *BLB_MOUSEPAT:IF BLB_DX%=BLB_MX% AND BLB_DY%=BLB_MY% THEN *BLB_SEL_MAIN
  62. 61861  GET@A(BLB_DX%,BLB_DY%)-(BLB_DX%+BLB_W%,BLB_DY%+170),BLB_MEM%,39000
  63. 61862  PUT@A(BLB_DX%,BLB_DY%)-(BLB_DX%+BLB_W%,BLB_DY%+170),BLB_MEM%
  64. 61863  GET@A(BLB_MX%,BLB_MY%)-(BLB_MX%+BLB_W%,BLB_MY%+170),BLB_MEM%
  65. 61864  PUT@A(BLB_MX%,BLB_MY%)-(BLB_MX%+BLB_W%,BLB_MY%+170),BLB_MEM%,,,,,39000
  66. 61865  BLB_DX%=BLB_MX%:BLB_DY%=BLB_MY%:GOTO *BLB_SEL_MAIN
  67. 61866 *BLB_SEL_UPDOWN
  68. 61867  J%=-(MOUSE(5,0)-BLB_DY%>100):B%=0
  69. 61868  WHILE MOUSE(2,0):BLB_MX%=MOUSE(0)-BLB_DX%:BLB_MY%=MOUSE(1)-BLB_DY%-J%*113
  70. 61869   A%=(BLB_MX%>BLB_W%-22)*(BLB_MX%<BLB_W%-4)*(BLB_MY%>20)*(BLB_MY%<34)
  71. 61870   IF A%<>B% THEN LINE(BLB_DX%+BLB_W%-20,BLB_DY%+21+J%*113)-STEP(14,12),XOR,%7,BF:B%=A%
  72. 61871   IF A%=1 AND ((BLB_H%+8<SEL AND J%=1) OR (BLB_H%>0 AND J%=0)) THEN A%=J%*2-1:BLB_H%=BLB_H%+A%:GOSUB *BLB_SEL_SCROLL
  73. 61872  WEND:IF B%=1 THEN LINE(BLB_DX%+BLB_W%-20,BLB_DY%+21+J%*113)-STEP(14,12),XOR,%7,BF
  74. 61873  GOTO *BLB_SEL_MAIN
  75. 61874 *BLB_SEL_BAR
  76. 61875  MOUSE 4,BLB_DX%+BLB_W%-21,BLB_DY%+36,BLB_DX%+BLB_W%-5,BLB_DY%+130
  77. 61876  D%=MOUSE(5,0)-BLB_DY%-36-BLB_H%*92/(SEL+1)
  78. 61877  WHILE MOUSE(2,0)
  79. 61878   IF 36+BLB_H%*93/(SEL+1)<BLB_MY% AND 38+BLB_H%*93/(SEL+1)+837/(SEL+1)>BLB_MY% THEN
  80. 61879    WHILE MOUSE(2,0):A%=(MOUSE(1)-BLB_DY%-36-D%)*(SEL+1)/92
  81. 61880     IF A%<0 THEN A%=0 ELSE IF A%>SEL-8 THEN A%=SEL-8
  82. 61881     IF A%<>BLB_H% THEN
  83. 61882      B%=(A%-BLB_H%):BLB_H%=A%:MOUSE 1,,,0:GOSUB *BLB_SEL_PUTBAR
  84. 61883      IF ABS(B%)>8 THEN GOSUB *BLB_SEL_PUTSTR ELSE A%=B%:GOSUB *BLB_SEL_SCROLL
  85. 61884      MOUSE 1,,,1
  86. 61885     ENDIF
  87. 61886    WEND
  88. 61887   ELSE
  89. 61888    A%=BLB_H%+SGN(MOUSE(1)-BLB_DY%-36-BLB_H%*93/(SEL+1))*8
  90. 61889    IF A%<0 THEN A%=0 ELSE IF A%>SEL-8 THEN A%=SEL-8
  91. 61890    IF A%<>BLB_H% THEN MOUSE 1,,,0:BLB_H%=A%:GOSUB *BLB_SEL_PUTSTR:MOUSE 1,,,1
  92. 61891   ENDIF
  93. 61892   BLB_MY%=MOUSE(1)-BLB_DY%:D%=BLB_MY%-36-BLB_H%*92/(SEL+1)
  94. 61893  WEND:MOUSE 4,0,0,BLB_RESO_X-1,BLB_RESO_Y-1:GOTO *BLB_SEL_MAIN
  95. 61894 *BLB_SEL_MARK
  96. 61895  IF MOUSE(2,0)=0 THEN *BLB_SEL_MAIN
  97. 61896  A%=MOUSE(1)-BLB_DY%-21:BLB_MX%=MOUSE(0)-BLB_DX%
  98. 61897  IF BLB_MX%<4 OR BLB_MX%>15+LENGTH*6 OR A%<0 OR A%>125 OR A%>SEL*14+13 THEN A%=-1 ELSE A%=A%\14
  99. 61898  IF A%<0 THEN
  100. 61899   IF BLB_M%>=BLB_H% AND BLB_M%<BLB_H%+9 THEN GOSUB *BLB_SEL_PUTMARK:BLB_M%=-1
  101. 61900   GOTO *BLB_SEL_MARK
  102. 61901  ENDIF
  103. 61902  IF BLB_M%<>A%+BLB_H% THEN
  104. 61903   IF BLB_M%>=BLB_H% AND BLB_M%<BLB_H%+9 THEN GOSUB *BLB_SEL_PUTMARK
  105. 61904   BLB_M%=A%+BLB_H%:GOSUB *BLB_SEL_PUTMARK:BLB_T%=0
  106. 61905  ENDIF
  107. 61906  IF BLB_T%>0 AND BLB_T%<INP(&H3B04)*25/32 THEN SEL=BLB_M%:GOTO *BLB_SEL_END
  108. 61907  BLB_T%=0:GOTO *BLB_SEL_MARK
  109. 61908 *BLB_SEL_PUTMARK
  110. 61909  LINE(BLB_DX%+4,BLB_DY%+21+(BLB_M%-BLB_H%)*14)-STEP(LENGTH*6+11,13),XOR,%7,BF:RETURN
  111. 61910 *BLB_SEL_PUTSTR
  112. 61911  FOR I%=0 TO 8:IF SEL>=I%+BLB_H% THEN GOSUB *BLB_SEL_PUT1STR
  113. 61912  NEXT:GOSUB *BLB_SEL_PUTBAR:RETURN
  114. 61913 *BLB_SEL_PUT1STR
  115. 61914  LINE(BLB_DX%+4,BLB_DY%+21+I%*14)-STEP(LENGTH*6+11,13),PSET,%15+(BLB_M%=I%+BLB_H%)*7,BF
  116. 61915  SYMBOL(BLB_DX%+10,BLB_DY%+22+14*I%),SEL$(I%+BLB_H%),.75!,.75!,%8-(BLB_M%=I%+BLB_H%)*7:RETURN
  117. 61916 *BLB_SEL_PUTBAR
  118. 61917  IF SEL<9 THEN LINE(BLB_DX%+BLB_W%-20,BLB_DY%+37)-STEP(14,93),PSET,%8,BF,7:RETURN
  119. 61918  LINE(BLB_DX%+BLB_W%-21,BLB_DY%+36)-STEP(16,BLB_H%*93/(SEL+1)+1),PSET,%8,BF,%9
  120. 61919  LINE STEP(-1,0)-STEP(-14,837/(SEL+1)),PSET,%8,BF,7
  121. 61920  LINE STEP(-1,0)-(BLB_DX%+BLB_W%-5,BLB_DY%+131),PSET,%8,BF,%9:RETURN
  122. 61921 *BLB_SEL_SCROLL
  123. 61922  MOUSE 1,,,0
  124. 61923  IF A%>0 THEN
  125. 61924   GET@A(BLB_DX%+4,BLB_DY%+21+14*A%)-(BLB_DX%+BLB_W%-25,BLB_DY%+146),BLB_MEM%,39000
  126. 61925   PUT@A(BLB_DX%+4,BLB_DY%+21)-(BLB_DX%+BLB_W%-25,BLB_DY%+146-14*A%),BLB_MEM%,,,,,39000
  127. 61926   FOR I%=9-A% TO 8:GOSUB *BLB_SEL_PUT1STR:NEXT
  128. 61927  ELSE IF A%<0 THEN
  129. 61928   GET@A(BLB_DX%+4,BLB_DY%+21)-(BLB_DX%+BLB_W%-25,BLB_DY%+146-14*A%),BLB_MEM%,39000
  130. 61929   PUT@A(BLB_DX%+4,BLB_DY%+21-14*A%)-(BLB_DX%+BLB_W%-25,BLB_DY%+146),BLB_MEM%,,,,,39000
  131. 61930   FOR I%=0 TO -A%-1:GOSUB *BLB_SEL_PUT1STR:NEXT
  132. 61931  ENDIF
  133. 61932  GOSUB *BLB_SEL_PUTBAR:MOUSE 1,,,1:RETURN
  134. 61933 *BLB_SEL_END:PUT@A(BLB_DX%,BLB_DY%)-(BLB_DX%+BLB_W%,BLB_DY%+170),BLB_MEM%:RETURN
  135.